using System.IO;

namespace NFreeMarker.Template
{
    /**
     * Represents the body of a directive invocation. An implementation of this 
     * class is passed to the {@link TemplateDirectiveModel#execute(freemarker.core.Environment, 
     * java.util.Map, TemplateModel[], TemplateDirectiveBody)}. The implementation of the method is 
     * free to invoke it any number of times, with any writer.
     *
     * @since 2.3.11
     * @author Attila Szegedi
     * @version $Id: $
     */

    public interface ITemplateDirectiveBody
    {
        /**
         * Renders the body of the directive body to the specified writer. The 
         * writer is not flushed after the rendering. If you pass the environment's
         * writer, there is no need to flush it. If you supply your own writer, you
         * are responsible to flush/close it when you're done with using it (which
         * might be after multiple renderings).
         * @param out the writer to write the output to.
         */
        void Render(TextWriter output);
    }
}